/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Controleur;

import Vue.Accueil;
import Modèle.Contact;
import Modèle.DateContactComparator;
import Vue.FenetreContact;
import Vue.FenetreListe;
import Vue.FenetreNouveau;
import Vue.FenetreRecherche;
import Modèle.Liste;
import Modèle.ListeComparator;
import Modèle.Sauvegarder;
import Modèle.TrierRelation;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeMap;

/**
 *
 * @author Valentin
 */
public class Controleur {
    
    
    Liste liste = new Liste();
    int largeur=400;
    int hauteur=600;
    
    
    
    Sauvegarder sauvegarde = new Sauvegarder();
    
    ListeComparator comparer;
    DateContactComparator comparerDate;
    
    TreeMap<String, Contact> listeTriee;
    TreeMap<String, Contact> listeTrieeDate;
    ArrayList<String> listeTrieeRelation;
    
    
    FenetreListe affichageListe;
    
    
    public Controleur() throws FileNotFoundException        //charger la liste des contacts depuis le fichier de sauvegarde
    {
       liste=sauvegarde.Chargement();
    }
    

    
    
    
    public void afficherFenetreAccueil()
    {
        Accueil accueil = new Accueil(largeur, hauteur, this);
    }
    
    public void afficherFenetreNouveau()
    {
        FenetreNouveau nouveau = new FenetreNouveau(largeur, hauteur, this);
    }
    

    
    
    public void afficherFenetreListe()          //afficher les contacts par ordre alphabétique
    {
        comparer = new ListeComparator();
        listeTriee = new TreeMap<String, Contact>(comparer);
        listeTriee.putAll(liste);
        affichageListe = new FenetreListe(largeur, hauteur, this);
        affichageListe.MaJListe(listeTriee);
    }
    
    public void afficherFenetreListeDate()      //afficher les contacts du plus récent au plus ancien
    {
        comparerDate = new DateContactComparator(liste);
        listeTrieeDate = new TreeMap<String, Contact>(comparerDate);
        listeTrieeDate.putAll(liste);
        affichageListe = new FenetreListe(largeur, hauteur, this);
        affichageListe.MaJListe(listeTrieeDate);
    }
    
    public void afficherFenetreListeRelation()      //afficher les contacts par type de relation
    {
        listeTrieeRelation = new ArrayList<String>();
        TrierRelation tri = new TrierRelation();
        listeTrieeRelation = tri.creeListeRelation(liste);
        affichageListe = new FenetreListe(largeur, hauteur, this);
        affichageListe.MaJListeRelation(listeTrieeRelation);
    }
    
    public void afficherFenetreRecherche()
    {
        FenetreRecherche chercher = new FenetreRecherche(largeur, hauteur, this);
    }
    
    
   //___________________________________________________________________________
    
    
    public void creerContact(String firstName, String lastName, String companyAdress, String personalPhone,
                    String profesionnalPhone, String homePage, String email, String photo, Boolean amis, Boolean famille, Boolean collegue)
    {
        Contact contact = new Contact(firstName, lastName, companyAdress, personalPhone, profesionnalPhone, homePage, email, photo, amis, famille, collegue);
        liste.ajouterContact(firstName+" "+lastName, contact);
        sauvegarde.Enregistrement(liste);
    }
    
    
    
    public void supprimerContact(String prenomNom)
    {
        liste.supprimerContact(prenomNom);
        sauvegarde.Enregistrement(liste);
        afficherFenetreListe();
    }
    
    
    public void rechercherContact(String prenomNom)
    {
        FenetreContact fenetre = new FenetreContact(largeur, hauteur, this, liste.ChercherContact(prenomNom)); 
    }
    
    
    
    public void modifierContact(Contact contact, String firstName, String lastName, String companyAdress, String personalPhone,
                    String profesionnalPhone, String homePage, String email, String photo, Boolean amis, Boolean famille, Boolean collegue)
    {
        String ancienneClef = contact.firstName+" "+contact.lastName;
        String nouvelleClef = firstName+" "+lastName;
        contact.modifierContact(firstName, lastName, companyAdress, personalPhone, profesionnalPhone, homePage, email, photo, amis, famille, collegue); 
        liste.modifierClef(ancienneClef, nouvelleClef, contact);
        affichageListe.MaJListe(listeTriee);
    }

    

    
    
}
